<?php

/**
 * Description of Categorie
 *
 * @author Remi
 * @author Jeremy
 * @version 1.0
 */
class Categorie
{
    /**
     * @var int
     */
    private $IdCategorie;
    /**
     * @var string
     */
    private $NomCategorie;
    /**
     * @var string
     */
    private $DescriptionCategorie;
    /**
     * @var bool
     */
    public $requeteOk;
    /**
     * @var string
     */
    public $errormsg;

    /**
     *
     * @param int $idC Identifiant d'une categorie
     */
    function __construct($idC = 0)
    {
        if (isset($idC) && !empty($idC))
        {
            $sql = SQL::getInstance()->getConnection();

            $query = "SELECT Categorie.* FROM Categorie WHERE IdCategorie = :id";
            $c = $sql->prepare($query);
            $c->bindParam(":id", $idC, PDO::PARAM_INT);

            if ($c->execute())
            {
                $result = $c->fetch(PDO::FETCH_OBJ);

                $this->IdCategorie = $result->IdCategorie;
                $this->NomCategorie = $result->NomCategorie;
                $this->DescriptionCategorie = $result->DescriptionCategorie;

                $this->errormsg = "Categorie recuperee";
                $this->requeteOk = true;
            }
            else
            {
                $this->IdCategorie = 0;
                $this->NomCategorie = "";
                $this->DescriptionCategorie = "";

                $this->errormsg = "SQL Failed";
                $this->requeteOk = false;
            }
            $c->closeCursor();
        }
        else
        {
            $this->IdCategorie = 0;
            $this->NomCategorie = "";
            $this->DescriptionCategorie = "";

            $this->errormsg = "Categorie vierge";
        }
    }

    /**
     *
     * @return bool True si la suppression s'est correctement effectuee
     */
    function delete()
    {
        if (!empty($this->IdCategorie))
        {
            $sql = SQL::getInstance()->getConnection();

            $query = "DELETE FROM Categorie WHERE IdCategorie :id";
            $c = $sql->prepare($query);
            $c->bindParam(":id", $this->IdCategorie, PDO::PARAM_INT);

            if ($c->execute())
            {
                return true;
            }
            else
            {
                $this->errormsg = $c->errorInfo();
                $this->requeteOk = false;
            }

            $c->closeCursor();
        }

        return false;
    }

    /**
     *
     * @return int Identifiant de la Categorie sinon 0
     */
    public function save()
    {
        if (!empty($this->NomCategorie))
        {
            $sql = SQL::getInstance()->getConnection();

            if (!empty($this->IdCategorie))
            {
                // Categorie definit on "update"
                $query = "UPDATE Categorie
                         SET
                            NomCategorie = :nom,
                            DescriptionCategorie = :desc
                         WHERE IdCategorie = :id";
                $sql->beginTransaction();
                try
                {
                    $c = $sql->prepare($query);
                    $c->bindParam(":id", $this->IdCategorie, PDO::PARAM_INT);

                    $c->bindParam(":nom", $this->NomCategorie, PDO::PARAM_STR, 255);
                    $c->bindParam(":desc", $this->DescriptionCategorie, PDO::PARAM_STR);

                    if ($c->execute())
                    {
                        $sql->commit();
                        $this->requeteOk = true;
                    }
                    else
                    {
                        $sql->rollBack();
                        $this->requeteOk = false;
                        $this->errormsg = $c->errorInfo();
                    }

                    $c->closeCursor();
                }
                catch (PDOException $ex)
                {
                    $this->errormsg = $ex->getMessage();
                    $this->requeteOk = false;
                }
            }
            else
            {
                // Nouvelle categorie on peut "insert"
                $query = "INSERT INTO Categorie
                            (NomCategorie,
                             DescriptionCategorie)
                          VALUES(:nom,:desc)";

                $sql->beginTransaction();
                try
                {
                    $c = $sql->prepare($query);

                    $c->bindParam(":nom", $this->NomCategorie, PDO::PARAM_STR, 255);
                    $c->bindParam(":desc", $this->DescriptionCategorie, PDO::PARAM_STR);

                    if ($c->execute())
                    {
                        $sql->commit();
                        $this->IdCategorie = $sql->lastInsertId();
                        $this->requeteOk = true;
                    }
                    else
                    {
                        $sql->rollBack();
                        $this->requeteOk = false;
                        $this->errormsg = $c->errorInfo();
                    }

                    $c->closeCursor();
                }
                catch (PDOException $ex)
                {
                    $this->errormsg = $ex->getMessage();
                    $this->requeteOk = false;
                }
            }
            return $this->IdCategorie;
        }
        else
            return 0;
    }

    /**
     * Getter / Setter
     */

    /**
     *
     * @return int
     */
    public function getIdCategorie()
    {
        return $this->IdCategorie;
    }

    /**
     *
     * @return string
     */
    public function getNomCategorie()
    {
        return ($this->NomCategorie);
    }

    /**
     *
     * @return string
     */
    public function getDescriptionCategorie()
    {
        return ($this->DescriptionCategorie);
    }

    /**
     *
     * @param string $NomCategorie
     * @return Array
     */
    public function setNomCategorie($NomCategorie)
    {
        $err = array("bool" => true, "msg" => "");
        if (isset($NomCategorie) && !empty($NomCategorie))
        {
            if (strlen($NomCategorie) < 255)
            {
                $this->NomCategorie = htmlentities($NomCategorie);
            }
            else
            {
                $err["bool"] = false;
                $err["msg"] = "Nom trop long";
            }
        }
        else
        {
            $err["bool"] = false;
            $err["msg"] = "Nom vide";
        }
        return $err;
    }

    /**
     *
     * @param string $DescriptionCategorie
     * @return Array
     */
    public function setDescriptionCategorie($DescriptionCategorie)
    {
        $err = array("bool" => true, "msg" => "");
        if (isset($DescriptionCategorie) && !empty($DescriptionCategorie))
        {
            if (strlen($DescriptionCategorie) < 500)
            {
                $this->DescriptionCategorie = htmlentities($DescriptionCategorie);
            }
            else
            {
                $err["bool"] = false;
                $err["msg"] = "Description trop longue";
            }
        }
        else
        {
            $err["bool"] = false;
            $err["msg"] = "Description vide";
        }
        return $err;
    }

    /**
     *
     * @return Array Array d'objet "categorie"
     */
    function getListCategory()
    {
        $sql = SQL::getInstance()->getConnection();

        $query = "SELECT * FROM Categorie";
        $c = $sql->query($query);
        $result = $c->fetchAll(PDO::FETCH_OBJ);

        if (!empty($result))
        {
            return $result;
        }
        return array();
    }

    /**
     *
     * @param int $id
     * @return string
     */
    static public function getNomById($id)
    {
        if (isset($id) && !empty($id))
        {
            $sql = SQL::getInstance()->getConnection();

            $query = "SELECT NomCategorie FROM Categorie WHERE IdCategorie = :id";
            $c = $sql->prepare($query);
            $c->bindParam(":id", $id, PDO::PARAM_INT);
            $c->execute();
            $result = $c->fetch(PDO::FETCH_OBJ);
            return $result->NomCategorie;
        }
        return "";
    }

}

?>
